
package com.jiangjiang.eshop.schedule.service;

import com.jiangjiang.eshop.customer.dto.ReturnGoodsWorksheetDTO;
import com.jiangjiang.eshop.order.dto.OrderInfoDTO;
import com.jiangjiang.eshop.purchase.dto.PurchaseOrderDTO;
import com.jiangjiang.eshop.schedule.dto.SaleDeliveryScheduleResult;
import com.jiangjiang.eshop.wms.dto.PurchaseInputOrderDTO;
import com.jiangjiang.eshop.wms.dto.ReturnGoodsInputOrderDTO;

/**
 * @ClassName ScheduleFacadeService
 * @Description 调度中心对外接口
 * @Author jhw
 * @Date 2021/5/24 23:32
 * @Version 1.0
 **/

public interface ScheduleService {

    /**
     * 通知库存中心，采购入库完成事件发生了
     * @param purchaseInputOrderDTO 采购入库单DTO
     * @return 处理结果
     */
    Boolean informPurchaseInputFinishedEvent(PurchaseInputOrderDTO purchaseInputOrderDTO);

    /**
     * 通知库存中心，"提交订单"事件发生了
     * @param orderInfoDTO 订单 DTO
     * @return 处理结果
     */
    Boolean informSubmitOrderEvent(OrderInfoDTO orderInfoDTO);

    /**
     * 通知库存中心，”支付订单“事件发生了
     * @param orderInfoDTO 订单DTO
     * @return 处理结果
     */
    Boolean informPayOrderEvent(OrderInfoDTO orderInfoDTO);

    /**
     * 通知库存中心，取消订单事件发生了
     * @param orderInfoDTO 订单 DTO
     * @return 处理结果
     */
    Boolean informCancelOrderEvent(OrderInfoDTO orderInfoDTO);

    /**
     * 通知库存中心，”完成退货入库“事件发生了
     * @param returnGoodsInputOrderDTO 退货入库单DTO
     * @return 处理结果
     */
    Boolean informReturnGoodsInputFinished(ReturnGoodsInputOrderDTO returnGoodsInputOrderDTO);

    /**
     * 调度采购入库
     * @param purchaseOrderDTO 采购单DTO
     * @return 处理结果
     */
    Boolean schedulePurchaseInput(PurchaseOrderDTO purchaseOrderDTO);

    /**
     * 调度销售出库
     * @param orderInfoDTO 订单DTO
     * @return 处理结果
     */
    Boolean scheduleSaleDelivery(OrderInfoDTO orderInfoDTO);

    /**
     * 调度退货入库
     * @param orderInfoDTO 订单DTO
     * @param returnGoodsWorksheetDTO 退货工单DTO
     * @return 处理结果
     */
    Boolean scheduleReturnGoodsInput(OrderInfoDTO orderInfoDTO, ReturnGoodsWorksheetDTO returnGoodsWorksheetDTO);

    /**
     *@param orderInfoId 订单id
     *@param goodsSkuId 商品sku id
     * @return
     */
    SaleDeliveryScheduleResult getScheduleResult(Long orderInfoId, Long goodsSkuId);



}
